package com.netease.premissionstudy.permission;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;

import com.netease.premissionstudy.R;
import com.netease.premissionstudy.permission.core.IPermission;
import com.netease.premissionstudy.permission.util.PermissionUtils;

// 空的Activity，权限库里面的 专门用来申请用的
public class MyPermissionActivity extends Activity {

    // 定义权限处理的标记 ---- 接收用户传递进来的
    private final static String PARAM_PERMSSION = "param_permission"; // 权限名
    private final static String PARAM_PERMSSION_CODE = "param_permission_code"; // 权限码
    public final static int PARAM_PERMSSION_CODE_DEFAULT = -1;

    // 真正接收存储的变量
    private String[] permissions; // 终于接收到了 权限
    private int requestCode; // 终于接收到了 权限Code
    private static IPermission iPermissionListener;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_permission);

        permissions = getIntent().getStringArrayExtra(PARAM_PERMSSION);
        requestCode = getIntent().getIntExtra(PARAM_PERMSSION_CODE, PARAM_PERMSSION_CODE_DEFAULT);

        if (permissions == null && requestCode < 0 && iPermissionListener == null) {
            this.finish();
            return;
        }

        // 能够走到这里，就开始去检查，是否已经授权了
        // 先检测下，到底已经授权了没有，如果没有，才去申请
        boolean permissionResult = PermissionUtils.hasPermissionRequest(this, permissions);
        if (permissionResult) {
            // 告诉外界， 已经授权了，通过接口
            iPermissionListener.ganted();

            this.finish();
            return;
        }

        // 能够走到这里，就证明，还需要去申请权限
        ActivityCompat.requestPermissions(this, permissions, requestCode);
    }

    // 申请的结果
    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           @NonNull String[] permissions,
                                           @NonNull int[] grantResults) { // 如果申请了三个权限，grantResults.len = 3
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        // 返回的结果，需要去验证一下，是否完全成功
        if (PermissionUtils.requestPermissionSuccess(grantResults)) {
            // 告诉外界，授权成功了，通过接口
            iPermissionListener.ganted();
            this.finish();
            return;
        }

        // 没有成功，可能的原因，是用户 不听话
        // 如果用户点击了，拒绝(勾选了“不再提醒”) 等操作
        if (!PermissionUtils.shouldShowRequestPermissionRationale(this, permissions)) {
            // 用户拒绝，不再提醒 等操作
            // 告诉外界，用户拒绝，不再提醒，通过接口
            iPermissionListener.denied();
            this.finish();
            return;
        }

        // 告诉外界，权限被取消，通过接口
        iPermissionListener.cancel();
        this.finish();
    }

    @Override
    public void finish() {
        super.finish();
        // 让此Activity不要有任何动画
        overridePendingTransition(0, 0);
    }

    /**
     * 此权限申请专用的Activity，对外暴露，static
     */
    public static void requestPermissionAction(Context context, String[] permissions,
                                               int requestCode, IPermission iPermissionListener) {
        MyPermissionActivity.iPermissionListener = iPermissionListener;
        Intent intent = new Intent(context, MyPermissionActivity.class);
        // 效果
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        Bundle bundle = new Bundle();
        bundle.putInt(PARAM_PERMSSION_CODE, requestCode);
        bundle.putStringArray(PARAM_PERMSSION, permissions);
        intent.putExtras(bundle);
        context.startActivity(intent);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 静态资源要置空
        iPermissionListener = null;
        permissions = null;
        requestCode = 0;
        System.gc();
    }

}
